package gdr.io;

import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;

/**
 * Importa dati da un file XML
 * @author Giorgio Vitale
 *
 * @param <T>
 */
public class XMLreader<T> {
private XMLDecoder decoder;
	
	public XMLreader()
	{}
	
	/**
	 * Apre il flusso sul file. 
	 * @param filename
	 * @throws IllegalArgumentException se si verifica un errore
	 */
	public void open(String filename) throws IllegalArgumentException{
		try{	decoder = new XMLDecoder(new BufferedInputStream( new FileInputStream(filename)));;
		} catch (Exception e) {
			System.err.println(e);
			throw new IllegalArgumentException();}
	}
	
	/**
	 * legge l'input da file. una volta terminato, restituisce null.
	 * @return il prossimo elemento, se presente, altrimenti null.
	 * @throws IllegalArgumentException se il decoder non e' stato aperto.
	 */
	@SuppressWarnings("unchecked")
	public T read() throws IllegalArgumentException{
		if (decoder == null) throw new IllegalArgumentException();
		try{return (T)decoder.readObject();
		}
		catch (Exception e) {return null;}
		
    }
	/**
	 * Chiude il flusso sul file.
	 */
	public void close()
	{	if (decoder!=null) decoder.close();
	}
}
